package pannelli.main;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;

import database.DB;

import it.jack.PannelloPrincipale;
import java.awt.BorderLayout;

import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.*;
import java.util.ArrayList;

import javax.swing.*;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import oggetti.Cliente;
import oggetti.Magazzino;
import oggetti.Riparazione;
import pannelli.sub.SubPannelloAccessoriInMagazzino;
import pannelli.sub.SubPannelloVisualizzaClienti;
import pannelli.sub.SubPannelloVisualizzaRiparazione;

public class PannelloRicerca extends javax.swing.JInternalFrame implements InternalFrameListener {

    private JTextField campocerca;
    private JButton cerca;
    private JComboBox parametri;
    private JComboBox cosa;
    private String[] parametriBoxes;
    private String[] cosaBoxes = {"Cerca", "Cliente", "Riparazione", "Accessorio"};
    private SubPannelloVisualizzaRiparazione riparazione;
    private JPanel contenitoreSub;
    private static PannelloRicerca instance;
    private SubPannelloVisualizzaRiparazione ri;

    public PannelloRicerca(int type) {
        super("Pannello Ricerca", true, true, true, true);
        this.instance = this;
        initGUI(type);
        centra();
        setVisible(true);
        this.addInternalFrameListener(this);
        addKeyListener();
    }

    public static PannelloRicerca getInstance() {
        return instance;
    }

    public void setFlag(boolean flag) {
        //this.riparazione.setFlag(flag);		
    }

    public void updateTableClienti() {
        SubPannelloVisualizzaClienti.getInstance().initTable();
    }

    public void updateTableRiparazioni() {
        riparazione.initTable();
    }
    private void addKeyListener(){
        KeyListener cercaListener = new KeyAdapter(){

            @SuppressWarnings("static-access")
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == e.VK_ENTER) {
                    cerca();
                }
            }
        };
        
        campocerca.addKeyListener(cercaListener);
        parametri.addKeyListener(cercaListener);
        cosa.addKeyListener(cercaListener);
    }
    private void cerca() {
        String daCercare = campocerca.getText();
        String selected = (String) cosa.getSelectedItem();
        String selected2 = (String) parametri.getSelectedItem();
        if (!selected.equals("Cerca")) {
            if (selected2.equals("Tutti")) {
                if (selected.equals("Cliente")) {
                    ArrayList<Cliente> result = new DB().getClienti();
                    if (result != null) {
                        SubPannelloVisualizzaClienti.getInstance().svuotaTabella();
                        SubPannelloVisualizzaClienti.getInstance().initTable(result);
                        contenitoreSub.removeAll();
                        contenitoreSub.add(SubPannelloVisualizzaClienti.getInstance(), BorderLayout.CENTER);
                        SubPannelloVisualizzaClienti.getInstance().setPreferredSize(new java.awt.Dimension(698, 226));
                        invalidate();
                        validate();
                        SubPannelloVisualizzaClienti.getInstance().setVisible(true);
                    } else {
                        JOptionPane.showMessageDialog(null, "Nessun cliente trovato!");
                    }
                } else if (selected.equals("Riparazione")) {
                    ArrayList<Riparazione> result = new DB().getRiparzioni();
                    if (result != null) {
                        riparazione = new SubPannelloVisualizzaRiparazione(result);
                        contenitoreSub.removeAll();
                        contenitoreSub.add(riparazione, BorderLayout.CENTER);
                        riparazione.setPreferredSize(new java.awt.Dimension(698, 226));
                        invalidate();
                        validate();
                        riparazione.setVisible(true);
                    } else {
                        JOptionPane.showMessageDialog(null, "Nessuna riparazione trovata!");
                    }
                } else {
                    ArrayList<Magazzino> result = new DB().getAccessori();
                    if (result != null) {
                        contenitoreSub.removeAll();
                        SubPannelloAccessoriInMagazzino.getInstance().initTable(result);
                        contenitoreSub.add(SubPannelloAccessoriInMagazzino.getInstance(), BorderLayout.CENTER);
                        SubPannelloAccessoriInMagazzino.getInstance().setPreferredSize(new java.awt.Dimension(698, 226));
                        invalidate();
                        validate();
                        SubPannelloAccessoriInMagazzino.getInstance().setVisible(true);
                    } else {
                        JOptionPane.showMessageDialog(null, "Nessun accessorio trovato!");
                    }
                    //System.out.println("tutti - accessori");
                }
            } else {
                if (daCercare.length() > 0) {
                    selected2 = selected2.toLowerCase();
                    if (selected.equals("Cliente")) {
                        selected2 = selected2.equals("ID") ? "id" : selected2.equals("Codice fiscale") ? "fiscale" : selected2;
                        ArrayList<Cliente> result = new DB().getResultFromClienti(selected2, daCercare);
                        if (result != null) {
                            SubPannelloVisualizzaClienti.getInstance().svuotaTabella();
                            SubPannelloVisualizzaClienti.getInstance().initTable(result);
                            contenitoreSub.removeAll();
                            contenitoreSub.add(SubPannelloVisualizzaClienti.getInstance(), BorderLayout.CENTER);
                            SubPannelloVisualizzaClienti.getInstance().setPreferredSize(new java.awt.Dimension(698, 226));
                            invalidate();
                            validate();
                            SubPannelloVisualizzaClienti.getInstance().setVisible(true);
                        } else {
                            JOptionPane.showMessageDialog(null, "Nessun risultato trovato!");
                        }

                    } else if (selected.equals("Riparazione")) {
                        selected2 = selected2.equals("ID Cliente".toLowerCase()) ? "idCliente" : selected2.equals("Utente".toLowerCase()) ? "username" : selected2.equals("Data Consegna".toLowerCase()) ? "dataConsegna" : selected2;
                        ArrayList<Riparazione> result = new DB().getResultFromRiparazioni(selected2, daCercare);
                        if (result != null) {
                            riparazione = new SubPannelloVisualizzaRiparazione(result);
                            contenitoreSub.removeAll();
                            contenitoreSub.add(riparazione, BorderLayout.CENTER);
                            riparazione.setPreferredSize(new java.awt.Dimension(698, 226));
                            invalidate();
                            validate();
                            riparazione.setVisible(true);
                        } else {
                            JOptionPane.showMessageDialog(null, "Nessun risultato trovato!");
                        }
                    } else {
                        selected2 = selected2.toLowerCase();
                        ArrayList<Magazzino> result = new DB().getResultFromAccessori(selected2, daCercare);
                        if (result != null) {
                            contenitoreSub.removeAll();
                            SubPannelloAccessoriInMagazzino.getInstance().initTable(result);
                            contenitoreSub.add(SubPannelloAccessoriInMagazzino.getInstance(), BorderLayout.CENTER);
                            SubPannelloAccessoriInMagazzino.getInstance().setPreferredSize(new java.awt.Dimension(698, 226));
                            invalidate();
                            validate();
                            SubPannelloAccessoriInMagazzino.getInstance().setVisible(true);
                        } else {
                            JOptionPane.showMessageDialog(null, "Nessun risultato trovato!");
                        }

                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Inserisci nell'apposita area di ricerca un testo per " + selected2 + " per la categoria " + selected);
                }
            }
        } else {
            JOptionPane.showMessageDialog(null, "Devi selezionare almeno un campo di ricerca!");
        }

    }

    private void initGUI(int type) {
        try {
            AnchorLayout thisLayout = new AnchorLayout();
            this.setLayout(thisLayout);
            this.setPreferredSize(new java.awt.Dimension(698, 300));
            {
                contenitoreSub = new JPanel(new BorderLayout());
                this.add(contenitoreSub, new AnchorConstraint(188, 1000, 1001, 0, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
            }
            {
                cerca = new JButton();
                this.add(cerca, new AnchorConstraint(41, 984, 145, 817, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
                cerca.setText("Cerca");
                cerca.setPreferredSize(new java.awt.Dimension(117, 31));
                cerca.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        cerca();
                    }
                });
            }
            {
                parametri = new JComboBox();
                this.add(parametri, new AnchorConstraint(45, 774, 145, 578, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
                parametri.setPreferredSize(new java.awt.Dimension(137, 30));
                parametri.setEnabled(false);
                parametri.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        String selected = (String) parametri.getSelectedItem();
                        campocerca.setEnabled(!selected.equals("Tutti"));
                    }
                });
            }
            {
                campocerca = new JTextField();
                this.add(campocerca, new AnchorConstraint(41, 307, 145, 35, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
                campocerca.setPreferredSize(new java.awt.Dimension(190, 31));
                campocerca.setEnabled(false);
            }
            {
                //type: 0-> cliente, 1-> riparazione 2->magazzino
                ComboBoxModel cosaModel =
                        new DefaultComboBoxModel(cosaBoxes);
                cosa = new JComboBox();
                this.add(cosa, new AnchorConstraint(41, 545, 145, 334, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
                cosa.setModel(cosaModel);
                cosa.setPreferredSize(new java.awt.Dimension(147, 31));
                cosa.addActionListener(new ActionListener() {

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        setParametri();
                    }
                });

                String selected = type == 0 ? "Cliente" : type == 1 ? "Riparazione" : type == 2 ? "Accessorio" : "Tutti";
                if (!selected.equals("Tutti")) {
                    cosaModel.setSelectedItem(selected);
                    campocerca.setEnabled(true);
                    setParametri();
                }
            }
            pack();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public Cliente getClienteFromRow(int row) {
        return SubPannelloVisualizzaClienti.getInstance().getClienteFromRow(row);
    }

    private void setParametri() {
        String selected = (String) cosa.getSelectedItem();
        parametri.setEnabled(true);
        campocerca.setEnabled(false);
        if (selected.equals("Cliente")) {
            parametriBoxes = new String[9];
            parametriBoxes[0] = "Tutti";
            parametriBoxes[1] = "ID";
            parametriBoxes[2] = "Nome";
            parametriBoxes[3] = "Cognome";
            parametriBoxes[4] = "IVA";
            parametriBoxes[5] = "Codice fiscale";
            parametriBoxes[6] = "Residenza";
            parametriBoxes[7] = "Telefono";
            parametriBoxes[8] = "Email";
            ComboBoxModel parametriModel =
                    new DefaultComboBoxModel(parametriBoxes);
            parametri.setModel(parametriModel);
        } else if (selected.equals("Riparazione")) {
            parametriBoxes = new String[9];
            parametriBoxes[0] = "Tutti";
            parametriBoxes[1] = "Scheda";
            parametriBoxes[2] = "ID Cliente";
            parametriBoxes[3] = "Preventivo";
            parametriBoxes[4] = "IMEI";
            parametriBoxes[5] = "Difetto";
            parametriBoxes[6] = "Stato";
            parametriBoxes[7] = "Utente";
            parametriBoxes[8] = "Data Consegna";
            ComboBoxModel parametriModel =
                    new DefaultComboBoxModel(parametriBoxes);
            parametri.setModel(parametriModel);
        } else if (selected.equals("Accessorio")) {
            parametriBoxes = new String[8];
            parametriBoxes[0] = "Tutti";
            parametriBoxes[1] = "Marca";
            parametriBoxes[2] = "Modello";
            parametriBoxes[3] = "IMEI";
            parametriBoxes[4] = "Seriale";
            parametriBoxes[5] = "PrezzoAcquisto";
            parametriBoxes[6] = "PrezzoRivendita";
            parametriBoxes[7] = "Condizione";
            ComboBoxModel parametriModel =
                    new DefaultComboBoxModel(parametriBoxes);
            parametri.setModel(parametriModel);
        } else {
            parametri.setEnabled(false);
        }
    }

    public void centra() {
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        setLocation(new Point((dimension.width - getSize().width) / 2,
                (dimension.height - getSize().height) / 2));
    }

    @Override
    public void internalFrameActivated(InternalFrameEvent arg0) {
        if (PannelloClienti.getIstance() == null) {
            PannelloPrincipale.getIstance().disableButtons();
        }
    }

    @Override
    public void internalFrameClosed(InternalFrameEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void internalFrameClosing(InternalFrameEvent arg0) {
        if (PannelloClienti.getIstance() == null && PannelloRiparazioni.getInstance()==null && PannelloMagazzino.getIstance()==null) {
            PannelloPrincipale.getIstance().activateButtons();
        }

        this.dispose();
    }

    @Override
    public void internalFrameDeactivated(InternalFrameEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void internalFrameDeiconified(InternalFrameEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void internalFrameIconified(InternalFrameEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void internalFrameOpened(InternalFrameEvent arg0) {
        if (PannelloClienti.getIstance() == null) {
            PannelloPrincipale.getIstance().disableButtons();
        }
    }
}
